import route_tools from './RouteTools'
import runModules from './runModules'
import controRoute from '../route/RouterHandler';
import { IncomingMessage, ServerResponse } from 'http';
import Context from '../model/Context';

// 每一次访问的入口文件
export = async (req:IncomingMessage,res:ServerResponse)=>{
  // 封装 ctx上下文对象
  let context = new Context(req,res);
  // 记录回调
  let record:any = ()=>{};
  //设置默认类型为utf-8
  res.setHeader("Content-Type", "text/html; charset=utf-8");
  
  // 执行顺序  记录请求  >>> 扩展  >>> [解析参数 >>> 全局中间件 >>> 目标路由] >>> 记录请求 
  try{
    // 记录请求
    record = await runModules(context,controRoute.getSpecialRoute("requestRecord")) || (()=>{});
    // 先执行扩展 扩展不能拦截数据,只有报错的时候才会被拦截
    //调用中间件,接受返回结果
    let content =  await runModules(context,await route_tools.getRoute(context)) || "";
    //发送结果
    context.body(content,true);
    record(content);
  }catch(err){
    console.log([err.message])
    console.log([err])
    context.$res.statusCode = 500;
    //流程出现异常直接结束请求
    //发送结果
    context.body(err,true);
    // @ts-ignore 执行请求
    record(data);
  }
}